package so.obligatorio.procesos;

import java.util.List;

import so.obligatorio.ManejadorColas;
import so.obligatorio.Reloj;


public class PDVEspectaculo extends PDV {

	@Override
	protected void procesar() {
		ManejadorColas mc = ManejadorColas.getInstance();
		try {
			Cliente c = obtenerCliente();
			if (c != null) {
				boolean entradasObtenidas = obtenerEntradas(c.getCantidad());
	
				//Marca el turno en el que sale el cliente
				c.setTurnoSalida(Reloj.getInstance().getTurno());
				mc.getSemTerminados().acquire();
				//Lo pone en la lista de terminados
				mc.getClientesTerminados().add(c);
				mc.getSemTerminados().release();
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	/**
	 * Obtiene el siguiente cliente a procesar
	 * @return
	 * @throws InterruptedException
	 */
	private Cliente obtenerCliente() throws InterruptedException {
		Cliente c = null;
		ManejadorColas mc = ManejadorColas.getInstance();

		mc.getSemDiscapacitados().acquire();
		c = obtenerCliente(mc.getDiscapacitados());
		mc.getSemDiscapacitados().release();
		if (c == null) {
			mc.getSemTrjPreferencial().acquire();
			c = obtenerCliente(mc.getTarjetasPreferenciales());
			mc.getSemTrjPreferencial().release();
		}
		if (c == null) {
			mc.getSemOtrosCompradores().acquire();
			c = obtenerCliente(mc.getOtrosCompradores());
			mc.getSemOtrosCompradores().release();
		}

		return c;
	}

}
